perm filename VIXSAI.SAI[VIS,HPM]1 blob
sn#263815 filedate 1977-02-15 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY FNTSEL,CHRDEP,MARSET
C00004 00003 OWN INTEGER XMAR
C00008 ENDMK
C⊗;
ENTRY FNTSEL,CHRDEP,MARSET;
BEGIN "VIXSAI"
REQUIRE "FILHDR.SAI[VIS,HPM]" SOURCE_FILE;
DEFINE PCLN=0; comment index of word in a picture file containing
number of scanlines in the picture;
DEFINE PCWD=1; comment number of words in the picture;
DEFINE PCBY=2; comment number of valid bytes in the picture;
DEFINE PCBYA=3; comment no. of bytes including the nulls at the end of lines;
DEFINE LNWD=4; comment no. of words per scanline;
DEFINE LNBY=5; comment no. of valid bytes per scanline;
DEFINE LNBYA=6; comment no. of bytes per scanline, including the nulls;
DEFINE WDBY=7; comment no. of bytes per word;
DEFINE WDBI=8; comment no. of bits containing data in a word;
DEFINE BYBI=9; comment no. of bits per byte;
DEFINE BPTAB=10; comment address of second entry in byte pntr. table;
DEFINE LINTAB=11; comment actual address of the first entry in the row table;
OWN INTEGER XMAR;
OWN INTEGER ARRAY FNTAR[0:'17];
OWN STRING ARRAY FNTNAM[0:'17];
OWN STRING FILNM;
EXTERNAL PROCEDURE ADDEL(REFERENCE INTEGER PIC; INTEGER I,J,VAL);
DEFINE FNTHIG='201;
INTERNAL INTEGER PROCEDURE FNTSEL(INTEGER FNTNUM; STRING FILSPEC;
REFERENCE INTEGER FNTHEAD);
BEGIN "FNTSEL"
INTEGER ICHAN,FOO,IFLAG;
PRSFIL(FILSPEC);
FNTNAM[FNTNUM]←DEVPRS&":"&FILPRS;
FNTAR[FNTNUM]←LOCATION(FNTHEAD);
ICHAN←GETCHAN;
IFLAG←TRUE;
OPEN(ICHAN,DEVPRS,'10,2,0,FOO,FOO,IFLAG);
LOOKUP(ICHAN,FILPRS,IFLAG);
IF IFLAG THEN BEGIN RELEASE(ICHAN); RETURN(0); END;
ARRYIN(ICHAN,MEMORY[LOCATION(FNTHEAD)+0],'202);
RELEASE(ICHAN);
RETURN(MEMORY[LOCATION(FNTHEAD)+'201]); comment return height of font;
END "FNTSEL";
INTERNAL PROCEDURE MARSET(INTEGER LMAR);
BEGIN
XMAR←LMAR;
END;
INTERNAL PROCEDURE CHRDEP(INTEGER FNTNUM; STRING CHRS; REFERENCE INTEGER PIC,
YLO,XLO; INTEGER YCOMP(1),XCOMP(1));
BEGIN "CHRDEP"
INTEGER ICHAN,FOO,POS,I,J,RASW,CHR;
PRSFIL(FNTNAM[FNTNUM]);
ICHAN←GETCHAN;
FOO←1;
OPEN(ICHAN,DEVPRS,'10,2,0,FOO,FOO,FOO);
LOOKUP(ICHAN,FILPRS,FOO);
WHILE LENGTH(CHRS)>0 DO
IF (MEMORY[FNTAR[FNTNUM]+(CHR←LOP(CHRS))]) LAND '777777≠0
∨ CHR='15 ∨ CHR='12 THEN
BEGIN "LOOP"
IF CHR='15 THEN XLO←XMAR ELSE
IF CHR='12 THEN YLO←YLO+MEMORY[FNTAR[FNTNUM]+'201] ELSE
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
USETI(ICHAN,POS%128 + 1);
FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(ICHAN);
RASW←WORDIN(ICHAN);
BEGIN "READ"
INTEGER XLOK,YLOK,NROW,PTQ;
INTEGER ARRAY CHAR[0:(RASW LAND '777777)-2];
ARRYIN(ICHAN,CHAR[0],(RASW LAND '777777)-1);
RASW←RASW LSH -27;
IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
XLOK←XLO-(CHAR[0] LSH -27);
YLOK←YLO+((CHAR[0] LSH -18) LAND '777);
NROW←CHAR[0] LAND '777777;
IF NROW*RASW>0 THEN PTQ←POINT(1,CHAR[1],-1);
FOR I←1 STEP 1 UNTIL NROW DO
BEGIN "PACK"
FOR J←1 STEP 1 UNTIL RASW DO IF ILDB(PTQ) THEN
ADDEL(PIC,(YLOK+I)%YCOMP,(XLOK+J)%XCOMP,1);
IF (PTQ LSH -30) < RASW THEN PTQ←PTQ LAND '7777777777;
END "PACK";
END "READ";
XLO←XLO+(MEMORY[FNTAR[FNTNUM]+CHR] LSH -18);
END "REAL";
END "LOOP";
RELEASE(ICHAN);
END "CHRDEP";
END "VIXSAI";